﻿#ifndef FTPMANAGER_H
#define FTPMANAGER_H

#include "3rd/libcurl/include/curl.h"
#include "typeConver.h"
#include "FileFunction.h"

#include <QObject>
#include <sys/types.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <QDir>
#include <QFile>
#include <QMutex>
#include <QDebug>


/*文件列表中的单个元素的文件路径剔除“传输文件的根路径”，
 * 再在前面加上需要传输的路径，就是传输的具体文件路径了*/
struct FileInfoList {
  QString localFileRootPath;//本地目录
  QString remoteFtpFileRootPath;//FTP远端目录
  QList<QFileInfo> *fileInfoList;//传输的文件列表
};

struct FtpFile {
  const char *filename;
  FILE *stream;
};

class FTPManager : public QObject
{
    Q_OBJECT
public:
    explicit FTPManager(const QString ip = nullptr,const QString port = nullptr,const QString username = nullptr,const QString password = nullptr);
    ~FTPManager();
    void setRemoteUrl(QString remoteUrl);//设置FTP服务器IP地址
    void setRemoteUrlPort(QString remoteUrlPort);//设置FTP服务器端口
    void setUserNamePassWord(QString userName,QString userpassWord);//设置访问账户和密码
    void setLocalFilePath(QString localFilePath);//设置本地存放位置
    void getFileList(FileInfoList fileInfoList);//获取需要的结构体信息
    static FTPManager *getInstance();

private:
    char *m_localFile;//本地文件的路径
    char *m_remoteUrl;//远端服务器的文件路径
    char *m_userNamePassWord;//用户和密码
    char *m_remoteUrlPort;//端口号
    FileInfoList st_fileInfoList;//传输结构体
    static FTPManager *self;

signals:
    void evt_finishOneFileTransfer();//完成一个文件传输

public slots:
    int on_startFTPUpload();
    int on_startFTPDownLoad();
};

#endif // FTPMANAGER_H
